#include <iostream>
#include <cstring>

using namespace std;
// #define ONLINE_JUDGE
const int N = 1e6 + 10;
int n, k;
int a[N], q[N];

int main() 
{

    #ifdef ONLINE_JUDGE

    #else
    freopen("./in.txt","r",stdin);
    #endif
    ios::sync_with_stdio(false);
	cin.tie(0);

    cin >> n >> k;

    for(int i = 0; i < n; i++) cin >> a[i];

    int hh = 0, tt = -1;

    for(int i = 0; i < n; i++) // 枚举队列终点
    {
        // 判断队头是否滑出窗口 队列有效 队长超出限制
        if(hh <= tt && k < i - q[hh] + 1) hh++; // 出队头，每次窗口只移动一位
        while(hh <= tt && a[q[tt]] >= a[i]) tt--; // 新插入的数，比原队尾数更小，可拼接更长的队列，弹出原队尾

        q[++tt] = i; // 插入到队尾

        if(i + 1 >= k) cout << a[q[hh]] << ' '; // 队头确定

    }
    cout << endl;
    
    hh = 0, tt = -1;
    for(int i = 0; i < n; i++) // 枚举队列终点
    {
        // 判断队头是否滑出窗口 队列有效 队长超出限制
        if(hh <= tt && k < i - q[hh] + 1) hh++; // 出队头，每次窗口只移动一位
        while(hh <= tt && a[q[tt]] <= a[i]) tt--; // 新插入的数，比原队尾数更大，可拼接更长的队列，弹出原队尾

        q[++tt] = i; // 插入到队尾

        if(i + 1 >= k) cout << a[q[hh]] << ' '; // 队头确定

    }

    cout << endl;
    return 0;
}

